﻿// Accord Unit Tests
// The Accord.NET Framework
// http://accord-framework.net
//
// Copyright © César Souza, 2009-2017
// cesarsouza at gmail.com
//
//    This library is free software; you can redistribute it and/or
//    modify it under the terms of the GNU Lesser General Public
//    License as published by the Free Software Foundation; either
//    version 2.1 of the License, or (at your option) any later version.
//
//    This library is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
//    Lesser General Public License for more details.
//
//    You should have received a copy of the GNU Lesser General Public
//    License along with this library; if not, write to the Free Software
//    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
//

namespace Accord.Tests.Statistics
{

    using Accord.Statistics.Distributions.Univariate;
    using NUnit.Framework;
    using Accord.Math;
    using System;

    [TestFixture]
    public class KolmogorovSmirnovDistributionTest
    {

        [Test]
        public void ConstructorTest()
        {
            var ks = new KolmogorovSmirnovDistribution(samples: 42);

            double mean = ks.Mean;     // 0.13404812830261556
            double median = ks.Median;   // 0.12393613519421857
            double var = ks.Variance; // 0.019154717445778062

            try
            {
                double mode = ks.Mode;
                Assert.Fail();
            }
            catch { }

            double cdf = ks.DistributionFunction(x: 0.27); // 0.99659863602996079

            double ccdf = ks.ComplementaryDistributionFunction(x: 0.27); // 0.0034013639700392062
            double icdf = ks.InverseDistributionFunction(p: cdf); // 0.26999997446092017

            double chf = ks.CumulativeHazardFunction(x: 0.27); // 5.6835787601476619

            string str = ks.ToString(); // "KS(x; n = 42)"

            Assert.AreEqual(0.13404812830261556, mean);
            Assert.AreEqual(0.12393613519421857, median, 1e-6);
            Assert.AreEqual(0.019154717445778062, var);
            Assert.AreEqual(5.6835787601476619, chf);
            Assert.AreEqual(0.99659863602996079, cdf);
            Assert.AreEqual(0.0034013639700392062, ccdf);
            Assert.AreEqual(0.27, icdf, 1e-6);
            Assert.AreEqual("KS(x; n = 42)", str);

            var range1 = ks.GetRange(0.95);
            var range2 = ks.GetRange(0.99);
            var range3 = ks.GetRange(0.01);

            Assert.AreEqual(0.076658557134805502, range1.Min);
            Assert.AreEqual(0.20517007413251875, range1.Max);
            Assert.AreEqual(0.064613698945741663, range2.Min);
            Assert.AreEqual(0.24612731591151149, range2.Max);
            Assert.AreEqual(0.064613698945741649, range3.Min);
            Assert.AreEqual(0.24612731591151149, range3.Max);

            Assert.AreEqual(0.011904761904761904, ks.Support.Min, 1e-10);
            Assert.AreEqual(1, ks.Support.Max);

            Assert.AreEqual(ks.InverseDistributionFunction(0), ks.Support.Min);
            Assert.AreEqual(ks.InverseDistributionFunction(1), ks.Support.Max);
        }

        [Test]
        public void CumulativeFunctionTest()
        {
            for (int i = 0; i < test.Length; i++)
            {
                double[] t = test[i];

                double x = t[0];
                int n = (int)t[1];

                double expected = t[2];
                double actual = KolmogorovSmirnovDistribution.CumulativeFunction(n, x);

                Assert.IsTrue(expected.IsEqual(actual, 1e-11));
            }
        }

        [Test]
        public void CumulativeFunctionTest2()
        {
            int n = 7;
            double statistic = 0.412773317497114;
            double expected = 0.135890127950767;
            double actual = KolmogorovSmirnovDistribution.ComplementaryDistributionFunction(n, statistic);

            Assert.AreEqual(expected, actual, 1e-14);
        }

        [Test]
        public void SurvivalFunctionTest()
        {
            for (int i = 0; i < test.Length; i++)
            {
                double[] t = test[i];

                double x = t[0];
                int n = (int)t[1];

                double expected = t[3];
                double actual = KolmogorovSmirnovDistribution.ComplementaryDistributionFunction(n, x);

                Assert.IsTrue(expected.IsEqual(actual, rtol: 1e-3));
            }
        }

        [Test]
        public void MedianTest()
        {
            var target = new KolmogorovSmirnovDistribution(7);

            Assert.AreEqual(target.Median, target.InverseDistributionFunction(0.5));
        }

        [Test]
        public void PelzGoodTest()
        {
            double actual;

            // Compare values presented on Simard's paper
            actual = KolmogorovSmirnovDistribution.PelzGood(140, 0.0464158883361278);
            Assert.AreEqual(0.0902592183, actual, 1e-10);

            actual = KolmogorovSmirnovDistribution.PelzGood(500, 0.0198657677675854);
            Assert.AreEqual(0.01302426466, actual, 1e-12);

            actual = KolmogorovSmirnovDistribution.PelzGood(1000, 0.0125146494913519);
            Assert.AreEqual(0.00289496816, actual, 1e-11);

            actual = KolmogorovSmirnovDistribution.PelzGood(5000, 0.00427994992226032);
            Assert.AreEqual(1.42356151e-5, actual, 1e-13);

            actual = KolmogorovSmirnovDistribution.PelzGood(10000, 0.00269619949977585);
            Assert.AreEqual(4.83345438e-7, actual, 1e-15);

            actual = KolmogorovSmirnovDistribution.PelzGood(50000, 0.00092208725841169);
            Assert.AreEqual(3.71471703e-12, actual, 1e-20);

            actual = KolmogorovSmirnovDistribution.PelzGood(100000, 0.00058087857335637);
            Assert.AreEqual(2.21229903e-15, actual, 1e-23);
        }

        [Test]
        public void DurbinTest()
        {
            double actual;

            // Compare values presented on Simard's paper
            actual = KolmogorovSmirnovDistribution.Durbin(140, 0.0464158883361278);
            Assert.AreEqual(0.0902623294750041, actual, 1e-15);

            actual = KolmogorovSmirnovDistribution.Durbin(500, 0.0198657677675854);
            Assert.AreEqual(0.0130242540021058, actual, 1e-15);

            actual = KolmogorovSmirnovDistribution.Durbin(1000, 0.0125146494913519);
            Assert.AreEqual(0.00289493725169812, actual, 1e-15);

            actual = KolmogorovSmirnovDistribution.Durbin(5000, 0.00427994992226032);
            Assert.AreEqual(1.42355083146454e-5, actual, 1e-20);

            actual = KolmogorovSmirnovDistribution.Durbin(10000, 0.00269619949977585);
            Assert.AreEqual(4.83345410767114e-7, actual, 1e-20);

            actual = KolmogorovSmirnovDistribution.Durbin(50000, 0.00092208725841169);
            Assert.AreEqual(3.71479094405454e-12, actual, 1e-24);

            actual = KolmogorovSmirnovDistribution.Durbin(100000, 0.00058087857335637);
            Assert.AreEqual(2.21236052547566e-15, actual, 1e-27);
        }

        [Test]
        [Category("Slow")]
        public void DurbinTest2()
        {
            double expected;
            double actual;

            expected = 0.99676943191713676985;
            actual = KolmogorovSmirnovDistribution.Durbin(2000, 0.04);
            Assert.AreEqual(expected, actual, 1e-13);

            expected = 0.9999989395694319171325;
            actual = KolmogorovSmirnovDistribution.Durbin(2000, 0.06);
            Assert.AreEqual(expected, actual, 1e-12);

            expected = 0.99945234913828052085;
            actual = KolmogorovSmirnovDistribution.Durbin(16000, 0.016);
            Assert.AreEqual(expected, actual, 1e-12);
        }

        [Test]
        public void NaN_Test()
        {
            var ks = new KolmogorovSmirnovDistribution(samples: 42);

            double nan = double.NaN;

            try
            {
                ks.DistributionFunction(x: nan);
                Assert.Fail();
            }
            catch (ArgumentOutOfRangeException) { }

            try
            {
                ks.ComplementaryDistributionFunction(x: nan);
                Assert.Fail();
            }
            catch (ArgumentOutOfRangeException) { }

            try
            {
                ks.InverseDistributionFunction(p: nan);
                Assert.Fail();
            }
            catch (ArgumentOutOfRangeException) { }
            try
            {
                ks.CumulativeHazardFunction(x: nan);
                Assert.Fail();
            }
            catch (ArgumentOutOfRangeException) { }

        }


        static double[][] test =
        {
            #region test data from Marsaglia's original implementation
            new double[] { 0.0874483967333, 120, 0.6998844892237998, 0.30011551077620024 },
            new double[] { 0.037527424, 500, 0.5293281915021995, 0.47067180849780055 },
            new double[] { 0.8008915818,  20, 0.9999999999999742, 2.5753542851274615E-14 },
            new double[] { 0.9004583223,  20, 1.0, 1.8250147643171067E-20 },
            new double[] { 1.0E-18,   3, 0.0, 1.0 },
            new double[] { 0.2500000001,   2, 8.000001323845991E-20, 1.0 },
            new double[] { 0.2500000002,   2, 3.2000005295383963E-19, 1.0 },
            new double[] { 0.2500000027,   2, 5.832000005850994E-17, 0.9999999999999999 },
            new double[] { 0.2500000028,   2, 6.272000043135384E-17, 0.9999999999999999 },
            new double[] { 1.7084392429421786E-18,   3, 0.0, 1.0 },
            new double[] { 2.3904711628601155E-18,   3, 0.0, 1.0 },
            new double[] { 3.3558259523139903E-18,   3, 0.0, 1.0 },
            new double[] { 3.3893920397221136E-18,   3, 0.0, 1.0 },
            new double[] { 6.403944646131906E-18,   3, 0.0, 1.0 },
            new double[] { 7.813015473590705E-18,   3, 0.0, 1.0 },
            new double[] { 1.2769458039013979E-17,   3, 0.0, 1.0 },
            new double[] { 1.8325167366715604E-17,   3, 0.0, 1.0 },
            new double[] { 2.742861049840143E-17,   3, 0.0, 1.0 },
            new double[] { 4.418334157115509E-17,   3, 0.0, 1.0 },
            new double[] { 8.275676342607906E-17,   3, 0.0, 1.0 },
            new double[] { 1.52616831011825E-16,   3, 0.0, 1.0 },
            new double[] { 1.548778248771713E-16,   3, 0.0, 1.0 },
            new double[] { 2.0146932072893042E-16,   3, 0.0, 1.0 },
            new double[] { 2.79041543799416E-16,   3, 0.0, 1.0 },
            new double[] { 3.6130000261718E-16,   3, 0.0, 1.0 },
            new double[] { 4.779979224403583E-16,   3, 0.0, 1.0 },
            new double[] { 5.283144227052953E-16,   3, 0.0, 1.0 },
            new double[] { 6.423064173097317E-16,   3, 0.0, 1.0 },
            new double[] { 8.223595415717707E-16,   3, 0.0, 1.0 },
            new double[] { 1.0075367893891292E-15,   3, 0.0, 1.0 },
            new double[] { 1.7679903052438226E-15,   3, 0.0, 1.0 },
            new double[] { 3.3080810021371643E-15,   3, 0.0, 1.0 },
            new double[] { 4.429163642402233E-15,   3, 0.0, 1.0 },
            new double[] { 5.417454306116982E-15,   3, 0.0, 1.0 },
            new double[] { 9.194497736653308E-15,   3, 0.0, 1.0 },
            new double[] { 1.3653926422838259E-14,   3, 0.0, 1.0 },
            new double[] { 1.665842532217155E-14,   3, 0.0, 1.0 },
            new double[] { 2.6256846489521604E-14,   3, 0.0, 1.0 },
            new double[] { 4.037389735589659E-14,   3, 0.0, 1.0 },
            new double[] { 4.886243312989384E-14,   3, 0.0, 1.0 },
            new double[] { 6.734735249511766E-14,   3, 0.0, 1.0 },
            new double[] { 1.0460638407229725E-13,   3, 0.0, 1.0 },
            new double[] { 1.0759945061159963E-13,   3, 0.0, 1.0 },
            new double[] { 1.0868526623636529E-13,   3, 0.0, 1.0 },
            new double[] { 1.6444103478717126E-13,   3, 0.0, 1.0 },
            new double[] { 1.7327070053058606E-13,   3, 0.0, 1.0 },
            new double[] { 2.470817262290823E-13,   3, 0.0, 1.0 },
            new double[] { 3.404916327617569E-13,   3, 0.0, 1.0 },
            new double[] { 6.742607597418448E-13,   3, 0.0, 1.0 },
            new double[] { 9.783010292214837E-13,   3, 0.0, 1.0 },
            new double[] { 1.5516778933516718E-12,   3, 0.0, 1.0 },
            new double[] { 2.7420005384992707E-12,   3, 0.0, 1.0 },
            new double[] { 3.196093760396699E-12,   3, 0.0, 1.0 },
            new double[] { 5.096064485665976E-12,   3, 0.0, 1.0 },
            new double[] { 7.1070554769790725E-12,   3, 0.0, 1.0 },
            new double[] { 1.187824608927479E-11,   3, 0.0, 1.0 },
            new double[] { 1.5736035953071318E-11,   3, 0.0, 1.0 },
            new double[] { 2.198068069131641E-11,   3, 0.0, 1.0 },
            new double[] { 4.375334404835052E-11,   3, 0.0, 1.0 },
            new double[] { 5.993562097443048E-11,   3, 0.0, 1.0 },
            new double[] { 1.183884786296497E-10,   3, 0.0, 1.0 },
            new double[] { 1.5698831284056644E-10,   3, 0.0, 1.0 },
            new double[] { 2.788806605218389E-10,   3, 0.0, 1.0 },
            new double[] { 3.673790949453898E-10,   3, 0.0, 1.0 },
            new double[] { 6.072098869761072E-10,   3, 0.0, 1.0 },
            new double[] { 8.663681947808671E-10,   3, 0.0, 1.0 },
            new double[] { 1.2052223557472559E-9,   3, 0.0, 1.0 },
            new double[] { 1.2585545345083222E-9,   3, 0.0, 1.0 },
            new double[] { 2.18323359396766E-9,   3, 0.0, 1.0 },
            new double[] { 2.622942582190825E-9,   3, 0.0, 1.0 },
            new double[] { 4.357221511894255E-9,   3, 0.0, 1.0 },
            new double[] { 5.302771319454252E-9,   3, 0.0, 1.0 },
            new double[] { 5.703052640634057E-9,   3, 0.0, 1.0 },
            new double[] { 1.0239586579186332E-8,   3, 0.0, 1.0 },
            new double[] { 1.070697825921768E-8,   3, 0.0, 1.0 },
            new double[] { 1.2848670341567362E-8,   3, 0.0, 1.0 },
            new double[] { 1.800222306441127E-8,   3, 0.0, 1.0 },
            new double[] { 2.6179621962868993E-8,   3, 0.0, 1.0 },
            new double[] { 3.2471232658449394E-8,   3, 0.0, 1.0 },
            new double[] { 3.444019610287466E-8,   3, 0.0, 1.0 },
            new double[] { 6.075257590946607E-8,   3, 0.0, 1.0 },
            new double[] { 6.938838785810339E-8,   3, 0.0, 1.0 },
            new double[] { 9.847790307638109E-8,   3, 0.0, 1.0 },
            new double[] { 1.4401974456788248E-7,   3, 0.0, 1.0 },
            new double[] { 2.699109509577073E-7,   3, 0.0, 1.0 },
            new double[] { 4.185459300277621E-7,   3, 0.0, 1.0 },
            new double[] { 4.4157090596521427E-7,   3, 0.0, 1.0 },
            new double[] { 5.758747404975302E-7,   3, 0.0, 1.0 },
            new double[] { 1.0307116197036365E-6,   3, 0.0, 1.0 },
            new double[] { 1.5046859632514322E-6,   3, 0.0, 1.0 },
            new double[] { 2.0815801540499833E-6,   3, 0.0, 1.0 },
            new double[] { 2.659710997795889E-6,   3, 0.0, 1.0 },
            new double[] { 3.3992617360242598E-6,   3, 0.0, 1.0 },
            new double[] { 5.313423210820013E-6,   3, 0.0, 1.0 },
            new double[] { 7.196320916785994E-6,   3, 0.0, 1.0 },
            new double[] { 1.2552913228163808E-5,   3, 0.0, 1.0 },
            new double[] { 1.4241346591333646E-5,   3, 0.0, 1.0 },
            new double[] { 2.0193312382662768E-5,   3, 0.0, 1.0 },
            new double[] { 2.7213393967988866E-5,   3, 0.0, 1.0 },
            new double[] { 3.9600121226246686E-5,   3, 0.0, 1.0 },
            new double[] { 7.491869914665606E-5,   3, 0.0, 1.0 },
            new double[] { 8.55599829295087E-5,   3, 0.0, 1.0 },
            new double[] { 8.734064835070783E-5,   3, 0.0, 1.0 },
            new double[] { 1.4685305351564744E-4,   3, 0.0, 1.0 },
            new double[] { 2.406763024873997E-4,   3, 0.0, 1.0 },
            new double[] { 4.4272507825923914E-4,   3, 0.0, 1.0 },
            new double[] { 6.222071388538592E-4,   3, 0.0, 1.0 },
            new double[] { 7.836517791808215E-4,   3, 0.0, 1.0 },
            new double[] { 8.794897096747409E-4,   3, 0.0, 1.0 },
            new double[] { 0.0013294809008774714,   3, 0.0, 1.0 },
            new double[] { 0.002352793211061785,   3, 0.0, 1.0 },
            new double[] { 0.0044860211008225055,   3, 0.0, 1.0 },
            new double[] { 0.008572884754661421,   3, 0.0, 1.0 },
            new double[] { 0.011866055444730562,   3, 0.0, 1.0 },
            new double[] { 0.021674132202647856,   3, 0.0, 1.0 },
            new double[] { 0.041537303510206326,   3, 0.0, 1.0 },
            new double[] { 0.04835012487732595,   3, 0.0, 1.0 },
            new double[] { 0.056323816114655416,   3, 0.0, 1.0 },
            new double[] { 0.08900470079055486,   3, 0.0, 1.0 },
            new double[] { 0.08942382168935578,   3, 0.0, 1.0 },
            new double[] { 0.1307760557655205,   3, 0.0, 1.0 },
            new double[] { 0.05966552441688863,  10, 2.644339499396161E-11, 0.9999999999735566 },
            new double[] { 0.08563190245697572,  10, 1.2258945027072256E-5, 0.9999877410549729 },
            new double[] { 0.17114394767649946,  10, 0.1146283797360909, 0.8853716202639091 },
            new double[] { 0.2677083652921913,  10, 0.6006629076621163, 0.3993370923378837 },
            new double[] { 0.5067133162697821,  10, 0.9933459734095763, 0.0066540265904236895 },
            new double[] { 0.9726057287326005,  10, 0.9999999999999996, 4.760225379057994E-16 },
            new double[] { 0.9869324449084753,  10, 1.0, 2.9038447441595343E-19 },
            new double[] { 0.036948475202052126,  14, 2.7175284104046686E-26, 1.0 },
            new double[] { 0.05995687357709461,  14, 3.458867993584891E-8, 0.9999999654113201 },
            new double[] { 0.06210726319438538,  14, 1.1367519611396648E-7, 0.9999998863248039 },
            new double[] { 0.10321803026205696,  14, 0.005429137572519663, 0.9945708624274804 },
            new double[] { 0.1657215598881826,  14, 0.22059907455473673, 0.7794009254452633 },
            new double[] { 0.20619277346287218,  14, 0.47508886535675326, 0.5249111346432467 },
            new double[] { 0.37485238838040535,  14, 0.9717216461935996, 0.028278353806400425 },
            new double[] { 0.5866618316501904,  14, 0.9999589937686634, 4.100623133660896E-5 },
            new double[] { 0.7517178788749314,  14, 0.9999999895193649, 1.0480635097212088E-8 },
            new double[] { 0.8710959591051262,  14, 0.9999999999992987, 7.012794619864927E-13 },
            new double[] { 0.9544860955361413,  14, 1.0, 3.273763524710658E-19 },
            new double[] { 0.01783021070473934,  39, 2.1999094851730493E-32, 1.0 },
            new double[] { 0.030817696648297584,  39, 1.3573605374052136E-11, 0.9999999999864264 },
            new double[] { 0.04639119166858241,  39, 2.3685254098093475E-5, 0.9999763147459019 },
            new double[] { 0.08622280927232497,  39, 0.09006507851676109, 0.909934921483239 },
            new double[] { 0.11806302659036368,  39, 0.3933487232923263, 0.6066512767076737 },
            new double[] { 0.12363007026384155,  39, 0.4512211094062717, 0.5487788905937283 },
            new double[] { 0.23389305514651526,  39, 0.9767265961041766, 0.02327340389582344 },
            new double[] { 0.3107499460756905,  39, 0.9992360468612308, 7.639531387692022E-4 },
            new double[] { 0.3257951294616443,  39, 0.9996532284582469, 3.4677154175306917E-4 },
            new double[] { 0.4105255591885934,  39, 0.9999981485316731, 1.851468326847976E-6 },
            new double[] { 0.4459464139013222,  39, 0.9999998631447141, 1.3685528593677904E-7 },
            new double[] { 0.6217542404277412,  39, 0.9999999999999956, 4.47616964829266E-15 },
            new double[] { 0.6745035623467588,  39, 1.0, 4.52573621820396E-18 },
            new double[] { 0.7629435849030797,  39, 1.0, 3.2587423243126793E-24 },
            new double[] { 0.006813952357700375,  79, 7.855494221925937E-122, 1.0 },
            new double[] { 0.008339556586600662,  79, 4.932317566139117E-73, 1.0 },
            new double[] { 0.015085756277626032,  79, 4.5619517406185366E-24, 1.0 },
            new double[] { 0.027693411669829127,  79, 1.4563941839748295E-7, 0.9999998543605816 },
            new double[] { 0.04766523447986349,  79, 0.009873760959402171, 0.9901262390405978 },
            new double[] { 0.08396383156977658,  79, 0.39661216151240536, 0.6033878384875946 },
            new double[] { 0.09745229886956981,  79, 0.5853209204923789, 0.41467907950762106 },
            new double[] { 0.12562844329759507,  79, 0.848424344293285, 0.15157565570671505 },
            new double[] { 0.12811107522195606,  79, 0.8630595998927099, 0.13694040010729014 },
            new double[] { 0.13681919973056383,  79, 0.9056043517672051, 0.0943956482327949 },
            new double[] { 0.2001398117780475,  79, 0.9970024706494632, 0.002997529350536765 },
            new double[] { 0.3417331782980734,  79, 0.9999999902886391, 9.711360901911557E-9 },
            new double[] { 0.6132171830607984,  79, 1.0, 4.3471128436201584E-29 },
            new double[] { 0.004975762428423226, 105, 2.0194871920404655E-186, 1.0 },
            new double[] { 0.008754548888390994, 105, 5.949738046026938E-53, 1.0 },
            new double[] { 0.009000020203346564, 105, 3.128072004933319E-50, 1.0 },
            new double[] { 0.012204926960663585, 105, 5.321804377510623E-28, 1.0 },
            new double[] { 0.012931825048667302, 105, 4.2656024777939165E-25, 1.0 },
            new double[] { 0.01473428155929676, 105, 1.469949973624498E-19, 1.0 },
            new double[] { 0.02168570193274469, 105, 2.491885421855406E-9, 0.9999999975081145 },
            new double[] { 0.024861880632886198, 105, 3.554415645379552E-7, 0.9999996445584355 },
            new double[] { 0.048080850665752205, 105, 0.04122257900757348, 0.9587774209924265 },
            new double[] { 0.06681650822715436, 105, 0.2890084976654551, 0.7109915023345449 },
            new double[] { 0.1026164704917102, 105, 0.7957167422993475, 0.20428325770065248 },
            new double[] { 0.1551997298092629, 105, 0.9887324516437052, 0.011267548356294843 },
            new double[] { 0.30214556265717285, 105, 0.9999999946785968, 5.321403186468281E-9 },
            new double[] { 0.5286497676683461, 105, 1.0, 6.788192256520175E-28 },
            new double[] { 0.8401874456683128, 105, 1.0, 1.1064758782558434E-83 },
            new double[] { 0.003667204669009714, 138, 1.5E-323, 1.0 },
            new double[] { 0.003976958615206567, 138, 1.2753819025215215E-198, 1.0 },
            new double[] { 0.004366090084513749, 138, 3.720758092274756E-154, 1.0 },
            new double[] { 0.004551780521910126, 138, 8.74894058065613E-141, 1.0 },
            new double[] { 0.006585106071518596, 138, 2.8785784517212773E-71, 1.0 },
            new double[] { 0.007678462421587598, 138, 7.951163310755222E-53, 1.0 },
            new double[] { 0.013777637012285984, 138, 2.187833418153473E-17, 1.0 },
            new double[] { 0.02131321490986085, 138, 1.6589814767468305E-7, 0.9999998341018523 },
            new double[] { 0.0379391325536091, 138, 0.01557932461304468, 0.9844206753869553 },
            new double[] { 0.06597069305774543, 138, 0.43736759786319745, 0.5626324021368025 },
            new double[] { 0.09294936270076733, 138, 0.8270609290621712, 0.1729390709378288 },
            new double[] { 0.11294937436702351, 138, 0.9454062908811981, 0.0545937091188019 },
            new double[] { 0.19680956772997654, 138, 0.9999630708139008, 3.692918609924283E-5 },
            new double[] { 0.2332022544191378, 138, 0.999999560032532, 4.399674680290134E-7 },
            new double[] { 0.38578690618786393, 138, 1.0, 5.412987003353243E-19 },
            new double[] { 0.5546582416317604, 138, 1.0, 1.8486904400933935E-40 },
            new double[] { 0.9073455382562483, 138, 1.0, 5.456573288516556E-143 },
            new double[] { 0.005909271022142944, 149, 1.2565961171234497E-81, 1.0 },
            new double[] { 0.007438096064553887, 149, 2.162279378398491E-52, 1.0 },
            new double[] { 0.009873314546249276, 149, 1.1076720925718396E-30, 1.0 },
            new double[] { 0.01957406487198184, 149, 3.05458517276908E-8, 0.9999999694541483 },
            new double[] { 0.03216915977941159, 149, 0.0033788699145708124, 0.9966211300854292 },
            new double[] { 0.04144492056303931, 149, 0.04930578152641416, 0.9506942184735858 },
            new double[] { 0.07284937900111821, 149, 0.610881136223648, 0.38911886377635196 },
            new double[] { 0.09074106021014933, 149, 0.8383801523205482, 0.1616198476794518 },
            new double[] { 0.10214920482086966, 149, 0.9168609935608565, 0.08313900643914351 },
            new double[] { 0.1668933617472142, 149, 0.9995731166917424, 4.269282741349237E-4 },
            new double[] { 0.2899365115438447, 149, 0.9999999999875475, 1.3791599431553825E-11 },
            new double[] { 0.29464004141476036, 149, 0.9999999999948087, 5.866307569875226E-12 },
            new double[] { 0.5171944733168022, 149, 1.0, 1.4431844580685267E-37 },
            new double[] { 0.8203235959233751, 149, 1.0, 1.3911901630610125E-110 },
            new double[] { 0.003368534755306215, 165, 5.3042990567465E-228, 1.0 },
            new double[] { 0.006680291104177688, 165, 1.1344130278505846E-58, 1.0 },
            new double[] { 0.010387462681417301, 165, 2.0464686886514866E-25, 1.0 },
            new double[] { 0.01856158870877147, 165, 2.609843702964538E-8, 0.9999999739015629 },
            new double[] { 0.029211440333812847, 165, 0.0017256722853347354, 0.9982743277146653 },
            new double[] { 0.05281601027236821, 165, 0.27366881997620474, 0.7263311800237953 },
            new double[] { 0.06481227239610517, 165, 0.5273350062066936, 0.4726649937933064 },
            new double[] { 0.10079606293044183, 165, 0.9347848980163384, 0.06521510198366165 },
            new double[] { 0.16837715403884684, 165, 0.9998527132769449, 1.473261444312604E-4 },
            new double[] { 0.25171229278974494, 165, 0.9999999989686665, 1.0632140693651443E-9 },
            new double[] { 0.45613612156692973, 165, 1.0, 6.742660177766154E-32 },
            new double[] { 0.48640899024660333, 165, 1.0, 1.74051030410887E-36 },
            new double[] { 0.5232104237007184, 165, 1.0, 1.3960478553294436E-42 },
            new double[] { 0.8144082172352607, 165, 1.0, 6.184828168809227E-120 },
            new double[] { 0.0027233880788739735, 205, 1.5476179220569127E-279, 1.0 },
            new double[] { 0.00366554050515009, 205, 2.1061207762211833E-149, 1.0 },
            new double[] { 0.005329657277237904, 205, 2.9917636475784845E-74, 1.0 },
            new double[] { 0.006717917775872108, 205, 5.0022786363171195E-48, 1.0 },
            new double[] { 0.011153842381063327, 205, 3.3008148196061384E-18, 1.0 },
            new double[] { 0.014750341519367894, 205, 1.3283194868683588E-10, 0.999999999867168 },
            new double[] { 0.0230467546962093, 205, 1.7793350571267765E-4, 0.9998220664942873 },
            new double[] { 0.025222710625289423, 205, 9.016058583549625E-4, 0.999098394141645 },
            new double[] { 0.0465956018509376, 205, 0.2531126657091048, 0.7468873342908953 },
            new double[] { 0.0673619401634344, 205, 0.7033850843624831, 0.29661491563751685 },
            new double[] { 0.11676238260817993, 205, 0.9931645640062745, 0.006835300888862879 },
            new double[] { 0.15746107850688154, 205, 0.9999338794987961, 6.614160538057323E-5 },
            new double[] { 0.25475715822678635, 205, 0.9999999999969676, 3.2340051999140026E-12 },
            new double[] { 0.27375494376806325, 205, 0.999999999999796, 4.5631318325646666E-14 },
            new double[] { 0.48024932371033724, 205, 1.0, 5.248510356858263E-44 },
            new double[] { 0.8458928188065807, 205, 1.0, 2.701882640925072E-166 },
            new double[] { 0.002999460957745065, 208, 1.546239293583735E-215, 1.0 },
            new double[] { 0.004348805684128865, 208, 1.2298567286997327E-108, 1.0 },
            new double[] { 0.00635250531089627, 208, 1.0337592109745456E-52, 1.0 },
            new double[] { 0.011359308216027469, 208, 2.4044124136850675E-17, 1.0 },
            new double[] { 0.017985054393308244, 208, 4.036182515468165E-7, 0.9999995963817484 },
            new double[] { 0.01945000061027376, 208, 4.048174313422154E-6, 0.9999959518256866 },
            new double[] { 0.01960177085427011, 208, 4.994248114328337E-6, 0.9999950057518857 },
            new double[] { 0.02682614003252233, 208, 0.002577718527068083, 0.9974222814729319 },
            new double[] { 0.03993125049085413, 208, 0.11890661482266424, 0.8810933851773357 },
            new double[] { 0.0421323788573445, 208, 0.16142738155094155, 0.8385726184490585 },
            new double[] { 0.04410152766518757, 208, 0.20358149263708886, 0.7964185073629111 },
            new double[] { 0.07884846487969888, 208, 0.8572927233490868, 0.1427072766509132 },
            new double[] { 0.14649450039287196, 208, 0.999767419839074, 2.3260598656370347E-4 },
            new double[] { 0.17513371461648164, 208, 0.9999952624964894, 4.743677222074974E-6 },
            new double[] { 0.2069528209297369, 208, 0.9999999729529828, 2.72632903320425E-8 },
            new double[] { 0.24622006539628735, 208, 0.9999999999869791, 1.3652695697145204E-11 },
            new double[] { 0.437422192917725, 208, 1.0, 9.913339251832686E-37 },
            new double[] { 0.5272713297848343, 208, 1.0, 1.9561883901879097E-54 },
            new double[] { 0.7745563294374458, 208, 1.0, 5.737900729649976E-132 },
            new double[] { 0.002801821407444479, 226, 4.0277318287885796E-227, 1.0 },
            new double[] { 0.005292237037073656, 226, 4.2480891835056243E-69, 1.0 },
            new double[] { 0.008089740195022182, 226, 7.087294782482421E-31, 1.0 },
            new double[] { 0.013683202485311217, 226, 3.3368649879243004E-11, 0.9999999999666314 },
            new double[] { 0.019149578866600757, 226, 7.781511893823113E-6, 0.9999922184881062 },
            new double[] { 0.02688282177717786, 226, 0.004606385991575614, 0.9953936140084244 },
            new double[] { 0.04151010330709648, 226, 0.1847052571982294, 0.8152947428017706 },
            new double[] { 0.041803721049066794, 226, 0.1913342791976535, 0.8086657208023464 },
            new double[] { 0.05502678915830462, 226, 0.5163962306086484, 0.48360376939135163 },
            new double[] { 0.09227767336093437, 226, 0.9600799589516891, 0.03992004104831093 },
            new double[] { 0.15544238896691123, 226, 0.9999690005326786, 3.1012611268420064E-5 },
            new double[] { 0.18117057979113085, 226, 0.9999994213365181, 5.801358480543904E-7 },
            new double[] { 0.28208431783897214, 226, 0.9999999999999575, 2.1127118212492683E-16 },
            new double[] { 0.5123591156391806, 226, 1.0, 1.3900212523333438E-55 },
            new double[] { 0.802896475478601, 226, 1.0, 9.398833234132706E-158 },
            new double[] { 0.00262943345426106, 256, 3.2669834152931976E-228, 1.0 },
            new double[] { 0.004590217770507611, 256, 5.651463266135122E-81, 1.0 },
            new double[] { 0.006983011064691756, 256, 1.4685645922884293E-36, 1.0 },
            new double[] { 0.00924122819153143, 256, 2.377978316381342E-21, 1.0 },
            new double[] { 0.014343191176812166, 256, 4.24739083799498E-9, 0.9999999957526091 },
            new double[] { 0.021200799672388252, 256, 2.849093751040875E-4, 0.9997150906248959 },
            new double[] { 0.02977017725880708, 256, 0.027916359440017444, 0.9720836405599825 },
            new double[] { 0.04944669421363725, 256, 0.4580062709663313, 0.5419937290336687 },
            new double[] { 0.07788864707364285, 256, 0.9151221570865576, 0.08487784291344236 },
            new double[] { 0.08387625404039295, 256, 0.9485647283266482, 0.05143527167335182 },
            new double[] { 0.10037267332907951, 256, 0.9893189063525037, 0.01068097481056499 },
            new double[] { 0.12132889535211122, 256, 0.9990349560733267, 9.650494558324109E-4 },
            new double[] { 0.12272933462307575, 256, 0.9991914773944978, 8.085313386609323E-4 },
            new double[] { 0.12535775762810444, 256, 0.9994231750995723, 5.768380523945472E-4 },
            new double[] { 0.23294117785207544, 256, 0.9999999999989763, 1.066269968482563E-12 },
            new double[] { 0.2469286537175973, 256, 0.9999999999997133, 3.107355504374143E-14 },
            new double[] { 0.4499926457855156, 256, 1.0, 7.913570617262211E-48 },
            new double[] { 0.7730824347855616, 256, 1.0, 1.6750178445108917E-161 },
            new double[] { 0.0026381946208543384, 271, 3.671872303464678E-216, 1.0 },
            new double[] { 0.0038053718101570145, 271, 6.743304610547158E-110, 1.0 },
            new double[] { 0.00709940946298631, 271, 1.2066381370961628E-33, 1.0 },
            new double[] { 0.013161772149137314, 271, 3.3863579128116374E-10, 0.9999999996613642 },
            new double[] { 0.01348171782221798, 271, 9.903963555697347E-10, 0.9999999990096037 },
            new double[] { 0.02434106959365506, 271, 0.00400295382414446, 0.9959970461758555 },
            new double[] { 0.026611235183822905, 271, 0.01187184991902037, 0.9881281500809797 },
            new double[] { 0.05076470284572544, 271, 0.5280056709132221, 0.47199432908677785 },
            new double[] { 0.07313479496563215, 271, 0.895218115486908, 0.104781884513092 },
            new double[] { 0.12740755008047794, 271, 0.9997294613066096, 2.705539155331626E-4 },
            new double[] { 0.21401511901006184, 271, 0.9999999999779691, 2.2565089891077654E-11 },
            new double[] { 0.21423479212425156, 271, 0.9999999999790944, 2.1417919011530047E-11 },
            new double[] { 0.36862415979150415, 271, 1.0, 1.547158208477389E-33 },
            new double[] { 0.5409564752529207, 271, 1.0, 8.873669940919815E-75 },
            new double[] { 0.0023547446664392946, 285, 1.3308423695554376E-255, 1.0 },
            new double[] { 0.003465922587353391, 285, 6.196006065262167E-126, 1.0 },
            new double[] { 0.005269682084118953, 285, 9.15833605290312E-57, 1.0 },
            new double[] { 0.008356797297812702, 285, 1.7103836484730308E-23, 1.0 },
            new double[] { 0.009802202349108852, 285, 2.9583960924226257E-17, 1.0 },
            new double[] { 0.019516957320813495, 285, 1.5775782017986742E-4, 0.9998422421798201 },
            new double[] { 0.03481538375912484, 285, 0.13210310379304857, 0.8678968962069514 },
            new double[] { 0.04884835632974047, 285, 0.5105794243192772, 0.48942057568072284 },
            new double[] { 0.08181396898341213, 285, 0.9583940657618015, 0.04160593423819847 },
            new double[] { 0.11565679336851309, 285, 0.9991112527628035, 8.887530258092282E-4 },
            new double[] { 0.15254368272708366, 285, 0.999997047120432, 2.9553778624428378E-6 },
            new double[] { 0.22665116263139432, 285, 0.9999999999997325, 2.390961969411298E-13 },
            new double[] { 0.2738015157557619, 285, 1.0, 2.2637801065338843E-19 },
            new double[] { 0.3791130668499364, 285, 1.0, 2.534613367355513E-37 },
            new double[] { 0.5439544277636599, 285, 1.0, 1.4694223641215864E-79 },
            new double[] { 0.0029583425526987866, 306, 6.719028129326769E-160, 1.0 },
            new double[] { 0.004403114532233401, 306, 5.788205249266149E-75, 1.0 },
            new double[] { 0.005619910876498726, 306, 3.890279922216398E-47, 1.0 },
            new double[] { 0.005735622687332937, 306, 2.4348591749467493E-45, 1.0 },
            new double[] { 0.00949200643061997, 306, 3.4070541931446196E-17, 1.0 },
            new double[] { 0.015869439497158692, 306, 2.5642562482152343E-6, 0.9999974357437518 },
            new double[] { 0.021027331179323983, 306, 0.0011191243254290533, 0.998880875674571 },
            new double[] { 0.03856497337529715, 306, 0.2620871831175919, 0.7379128168824081 },
            new double[] { 0.06758550360943388, 306, 0.8833354835182262, 0.11666451648177378 },
            new double[] { 0.10176193234740732, 306, 0.9967284081320754, 0.003271564745978962 },
            new double[] { 0.17540795562413664, 306, 0.9999999895482824, 1.050036498585974E-8 },
            new double[] { 0.1870750683870221, 306, 0.9999999992521601, 7.544734284053806E-10 },
            new double[] { 0.3016027694765432, 306, 1.0, 3.455229273826105E-25 },
            new double[] { 0.5525949658260404, 306, 1.0, 2.3705505648916777E-88 },
            new double[] { 0.6285069211039505, 306, 1.0, 1.757510246786042E-117 },
            new double[] { 0.001986309981305908, 331, 6.603507318099785E-309, 1.0 },
            new double[] { 0.0027527192623179714, 331, 6.06306672184354E-171, 1.0 },
            new double[] { 0.0036784478346884083, 331, 3.9322471624239855E-98, 1.0 },
            new double[] { 0.006227885042807813, 331, 4.42788437867469E-36, 1.0 },
            new double[] { 0.009928630929897327, 331, 1.2140796735878113E-14, 0.9999999999999879 },
            new double[] { 0.011831601572376458, 331, 2.1207738863755116E-10, 0.9999999997879226 },
            new double[] { 0.02149821639310309, 331, 0.002786086280961749, 0.9972139137190382 },
            new double[] { 0.038880257275086136, 331, 0.31601746094677186, 0.6839825390532281 },
            new double[] { 0.057646232066241275, 331, 0.7870151308046673, 0.21298486919533266 },
            new double[] { 0.07942497754853448, 331, 0.970959442958407, 0.02904055704159303 },
            new double[] { 0.12451531089178039, 331, 0.9999376510778856, 6.235687876253531E-5 },
            new double[] { 0.1619095664733735, 331, 0.9999999525266352, 4.759711509454965E-8 },
            new double[] { 0.1990952743956907, 331, 0.9999999999944676, 5.6446427387571574E-12 },
            new double[] { 0.2652689719710817, 331, 1.0, 4.752881704437843E-21 },
            new double[] { 0.405375423942048, 331, 1.0, 1.177346019114002E-49 },
            new double[] { 0.5487286355066128, 331, 1.0, 4.4226554286781263E-94 },
            new double[] { 0.6868538182623809, 331, 1.0, 6.436070772393507E-156 },
            new double[] { 0.0020259925118476384, 369, 6.25777846560847E-272, 1.0 },
            new double[] { 0.0034087632267878767, 369, 5.296669749396544E-103, 1.0 },
            new double[] { 0.004637084890661731, 369, 1.764248639855113E-57, 1.0 },
            new double[] { 0.005249580732659331, 369, 2.3354571958409598E-45, 1.0 },
            new double[] { 0.007939247998660756, 369, 1.938811214763007E-20, 1.0 },
            new double[] { 0.01145267044312862, 369, 5.304672568651254E-10, 0.9999999994695328 },
            new double[] { 0.017721944794656073, 369, 2.801956581026885E-4, 0.9997198043418973 },
            new double[] { 0.030429543074187736, 369, 0.12648442309678792, 0.8735155769032121 },
            new double[] { 0.039094971400719485, 369, 0.3887584662039571, 0.6112415337960428 },
            new double[] { 0.06729567907426456, 369, 0.9324807998842625, 0.06751920011573753 },
            new double[] { 0.0811405482043464, 369, 0.9853610661969656, 0.01463887015672603 },
            new double[] { 0.13340754450026254, 369, 0.9999965453845541, 3.4562407173613856E-6 },
            new double[] { 0.1338075566009392, 369, 0.9999968102161618, 3.1913360923361043E-6 },
            new double[] { 0.2092184038686286, 369, 0.9999999999999872, 1.1997949226350596E-14 },
            new double[] { 0.3838041630819119, 369, 1.0, 2.0982382156254426E-49 },
            new double[] { 0.6614280379225779, 369, 1.0, 4.2488964663563157E-159 },
            new double[] { 0.002277361887037264, 407, 1.0055360252108698E-203, 1.0 },
            new double[] { 0.0023656584358390546, 407, 1.946263259059746E-189, 1.0 },
            new double[] { 0.003968144079347038, 407, 8.286859312164396E-71, 1.0 },
            new double[] { 0.005561895449488847, 407, 3.799003609597991E-37, 1.0 },
            new double[] { 0.007173981014996634, 407, 1.0208213131232684E-22, 1.0 },
            new double[] { 0.011039173441984233, 407, 8.544057343157426E-10, 0.9999999991455942 },
            new double[] { 0.011557184229879449, 407, 5.9292400555499056E-9, 0.9999999940707599 },
            new double[] { 0.01869153111228738, 407, 0.0015761522677654376, 0.9984238477322346 },
            new double[] { 0.03079432300685046, 407, 0.17668222213856746, 0.8233177778614326 },
            new double[] { 0.04265178792444534, 407, 0.5625051485894134, 0.43749485141058664 },
            new double[] { 0.05747990257616717, 407, 0.8693702105249518, 0.13062978947504822 },
            new double[] { 0.06747433814515508, 407, 0.9530933805179117, 0.046906619482088296 },
            new double[] { 0.09445430043601143, 407, 0.9986964424207165, 0.0013035570829666484 },
            new double[] { 0.1790290940488768, 407, 0.9999999999931324, 6.953355721659381E-12 },
            new double[] { 0.292789044450029, 407, 1.0, 2.0926532540352477E-31 },
            new double[] { 0.2968175701818392, 407, 1.0, 2.788464637506734E-32 },
            new double[] { 0.4762096936525148, 407, 1.0, 2.575060410055433E-85 },
            new double[] { 0.7060591396611217, 407, 1.0, 1.3368797428156868E-204 },
            new double[] { 0.7751312268701386, 407, 1.0, 3.0720821941805925E-258 },
            new double[] { 0.0017562497877576441, 419, 1.050255E-317, 1.0 },
            new double[] { 0.0019273538098842082, 419, 2.069231467830617E-269, 1.0 },
            new double[] { 0.0023672392977338516, 419, 5.740663949901917E-184, 1.0 },
            new double[] { 0.0034033067842091824, 419, 2.2890672089458056E-92, 1.0 },
            new double[] { 0.006793688914671976, 419, 1.4095543140955147E-24, 1.0 },
            new double[] { 0.011294343316704838, 419, 4.124950733803557E-9, 0.9999999958750493 },
            new double[] { 0.01355951615396333, 419, 2.2607480130911223E-6, 0.9999977392519869 },
            new double[] { 0.019636413187317393, 419, 0.003932567722859699, 0.9960674322771403 },
            new double[] { 0.028740327082636512, 419, 0.1307128286893481, 0.8692871713106519 },
            new double[] { 0.03331402065574002, 419, 0.2719577326431294, 0.7280422673568706 },
            new double[] { 0.0546359380041569, 419, 0.8420726575271476, 0.15792734247285245 },
            new double[] { 0.09827121228066342, 419, 0.999434872929603, 5.651321464078702E-4 },
            new double[] { 0.12093170707590224, 419, 0.999991512947813, 8.489117134779589E-6 },
            new double[] { 0.21740750094911107, 419, 1.0, 7.23119872680169E-18 },
            new double[] { 0.3785517089966991, 419, 1.0, 1.8262139085545097E-54 },
            new double[] { 0.44871472434229065, 419, 1.0, 1.7353872904966437E-77 },
            new double[] { 0.5802846551696165, 419, 1.0, 1.9543987232715582E-134 },
            new double[] { 0.0024649967518019476, 444, 5.181439128031917E-161, 1.0 },
            new double[] { 0.004245492345140116, 444, 1.3664736627254145E-57, 1.0 },
            new double[] { 0.006786434371113478, 444, 2.446000340753334E-23, 1.0 },
            new double[] { 0.007816584432209776, 444, 1.0047935634355673E-17, 1.0 },
            new double[] { 0.014895453044169444, 444, 5.039788270891584E-5, 0.9999496021172911 },
            new double[] { 0.029638290826145077, 444, 0.18101167784954453, 0.8189883221504555 },
            new double[] { 0.04806364035820704, 444, 0.7514787946385652, 0.24852120536143485 },
            new double[] { 0.07384340668577263, 444, 0.9850304067607477, 0.014969550933991493 },
            new double[] { 0.07630154233391784, 444, 0.9892385017208966, 0.010761459572211118 },
            new double[] { 0.1388062911995149, 444, 0.9999999367308783, 6.335247473495356E-8 },
            new double[] { 0.20405993385306911, 444, 1.0, 1.0930393829039874E-16 },
            new double[] { 0.3380147071262303, 444, 1.0, 9.287851929889021E-46 },
            new double[] { 0.44067273119129813, 444, 1.0, 4.967413769905547E-79 },
            new double[] { 0.49024301686027494, 444, 1.0, 6.265553783052797E-99 },
            new double[] { 0.6169026819934953, 444, 1.0, 3.2632701917186374E-163 },
            new double[] { 0.7773204729218981, 444, 1.0, 9.375045026377598E-284 },
            new double[] { 0.002763272169703087, 480, 1.8661401454171713E-121, 1.0 },
            new double[] { 0.00322853236909366, 480, 2.061461554159702E-90, 1.0 },
            new double[] { 0.005572249473861376, 480, 8.190136341480116E-32, 1.0 },
            new double[] { 0.008404972550760547, 480, 2.7302803351103165E-14, 0.9999999999999727 },
            new double[] { 0.013731432363084769, 480, 1.8300634494506934E-5, 0.9999816993655055 },
            new double[] { 0.019096513930834603, 480, 0.0065012230516207576, 0.9934987769483793 },
            new double[] { 0.023156539688941616, 480, 0.04622677018164361, 0.9537732298183564 },
            new double[] { 0.024110317820419645, 480, 0.06345102284891863, 0.9365489771510813 },
            new double[] { 0.03550782003402406, 480, 0.4319445840862994, 0.5680554159137006 },
            new double[] { 0.06499402197499485, 480, 0.9668734355536208, 0.03312656444637918 },
            new double[] { 0.10055428261663434, 480, 0.9998881390476895, 1.1186542163662802E-4 },
            new double[] { 0.1823471235443588, 480, 0.9999999999999806, 1.9367178969996076E-14 },
            new double[] { 0.31683204800143333, 480, 1.0, 2.4423735420111207E-43 },
            new double[] { 0.32372732276973254, 480, 1.0, 2.841275538128853E-45 },
            new double[] { 0.49074674472378627, 480, 1.0, 3.8419502231503185E-107 },
            new double[] { 0.6733514767280742, 480, 1.0, 1.422402349741272E-215 },
            new double[] { 0.6784759192782979, 480, 1.0, 1.9586163266252572E-219 },
            new double[] { 0.8120941083624699, 493, 1.0, 0.0 },
            new double[] { 0.01006, 10000, 0.7381264851918248, 0.2618735148081752 },
            new double[] { 0.03519, 10000, 0.9999999999659548, 3.4045845843790335E-11 },
            new double[] { 0.07254, 10000, 1.0, 3.3251826445487512E-46 },
            new double[] { 0.09002, 10000, 1.0, 5.783467452898808E-71 },
            new double[] { 0.11735, 10000, 1.0, 1.9375080374897964E-120 },
            new double[] { 0.12117, 10000, 1.0, 2.0968456986708996E-128 },
            new double[] { 0.13914, 10000, 1.0, 2.3711176663215082E-169 },
            new double[] { 0.16482, 10000, 1.0, 7.162609522065977E-238 },
            new double[] { 0.17552, 10000, 1.0, 6.375683146585048E-270 },
            new double[] { 0.19072, 10000, 1.0, 5.08255E-319 },
            new double[] { 0.02812, 16829, 0.9999999999945973, 5.4008237772958044E-12 },
            new double[] { 0.029, 16829, 0.9999999999989923, 9.935541534494032E-13 },
            new double[] { 0.05978, 16829, 1.0, 1.0117720483876554E-52 },
            new double[] { 0.06646, 16829, 1.0, 4.515102086330661E-65 },
            new double[] { 0.08167, 16829, 1.0, 4.3165994554674035E-98 },
            new double[] { 0.09634, 16829, 1.0, 2.103717548299794E-136 },
            new double[] { 0.09928, 16829, 1.0, 7.574658960882923E-145 },
            new double[] { 0.13873, 16829, 1.0, 5.252492070128297E-283 },
            new double[] { 0.02057, 51851, 1.0, 1.7258362633348893E-19 },
            new double[] { 0.04407, 51851, 1.0, 6.04179495786453E-88 },
            new double[] { 0.04532, 51851, 1.0, 5.546310639172054E-93 },
            new double[] { 0.07212, 51851, 1.0, 5.725849462791673E-235 },
            new double[] { 0.00811, 86055, 0.9999758791019548, 2.4120898116406057E-5 },
            new double[] { 0.00875, 86055, 0.9999962360753207, 3.7639247087840327E-6 },
            new double[] { 0.03588, 86055, 1.0, 1.08819437588127E-96 },
            new double[] { 0.04243, 86055, 1.0, 4.6649445894187854E-135 },
            new double[] { 0.05921, 86055, 1.0, 1.0769531553247576E-262 },
            new double[] { 0.01328, 105082, 1.0, 1.5842224832557E-16 },
            new double[] { 0.03555, 105082, 1.0, 8.08036811618846E-116 },
            new double[] { 0.0177, 136279, 1.0, 1.618487471212398E-37 },
            new double[] { 0.00706, 141710, 0.999998541886378, 1.4581136272291633E-6 },
            new double[] { 0.01301, 141710, 1.0, 2.9018065257759956E-21 },
            new double[] { 0.0236, 141710, 1.0, 5.381050877174339E-69 },
            new double[] { 0.03227, 155734, 1.0, 2.4927414725886968E-141 },
            new double[] { 0.04021, 155734, 1.0, 3.1800144637190684E-219 },
            new double[] { 1.0E-4, 176578, 1.0558403228505486E-299, 1.0 },
            new double[] { 0.04017, 176578, 1.0, 5.159948086688473E-248 },
            new double[] { 1.0E-4, 189938, 1.501927348154832E-278, 1.0 },
            new double[] { 0.03127, 189938, 1.0, 8.698112056171792E-162 },
            new double[] { 1.0E-4, 194807, 1.4516327709612026E-271, 1.0 },
            new double[] { 0.03021, 194807, 1.0, 6.841644352532341E-155 },
            new double[] { 1.0E-4, 225770, 3.2252871296613343E-234, 1.0 },
            new double[] { 0.02913, 225770, 1.0, 7.195524813582364E-167 },
            new double[] { 0.0333, 225770, 1.0, 6.020496100507759E-218 },
            new double[] { 1.0E-4, 254690, 1.4544213913004077E-207, 1.0 },
            new double[] { 0.01447, 254690, 1.0, 9.446787905860134E-47 },
            new double[] { 0.03319, 254690, 1.0, 3.434073444465756E-244 },
            new double[] { 1.0E-4, 261808, 6.5599907059079495E-202, 1.0 },
            new double[] { 0.00114, 261808, 0.11481359395448683, 0.8851864060455131 },
            new double[] { 0.00779, 261808, 0.9999999999999678, 3.1537042002932814E-14 },
            new double[] { 0.02105, 261808, 1.0, 3.3258901997774765E-101 },
            new double[] { 1.0E-4, 279868, 7.381540880441882E-189, 1.0 },
            new double[] { 1.0E-4, 314530, 5.086782218311797E-168, 1.0 },
            new double[] { 0.00233, 314530, 0.9343584929320213, 0.06564150706797867 },
            new double[] { 0.02861, 314530, 1.0, 4.260495733164515E-224 },
            new double[] { 1.0E-4, 319743, 2.809045130884613E-165, 1.0 },
            new double[] { 0.02433, 319743, 1.0, 7.460541145693766E-165 },
            new double[] { 1.0E-4, 341419, 8.922533139163219E-155, 1.0 },
            new double[] { 0.01737, 341419, 1.0, 6.531819696687811E-90 },
            new double[] { 1.0E-4, 352235, 5.086880769977606E-150, 1.0 },
            new double[] { 0.02388, 352235, 1.0, 6.363091638850863E-175 },
            new double[] { 0.02786, 352235, 1.0, 6.0248630404389104E-238 },
            new double[] { 1.0E-4, 358597, 2.342531515025503E-147, 1.0 },
            new double[] { 0.01044, 358597, 1.0, 2.231507708052873E-34 },
            new double[] { 0.02225, 358597, 1.0, 1.1983488882248497E-154 },
            new double[] { 0.02573, 358597, 1.0, 1.1392815803101761E-206 },
            new double[] { 1.0E-4, 400581, 6.625305665787124E-132, 1.0 },
            new double[] { 0.02843, 400581, 1.0, 1.0265785798243087E-281 },
            new double[] { 1.0E-4, 423235, 7.664083198039465E-125, 1.0 },
            new double[] { 1.0E-4, 432762, 4.3048048274549954E-122, 1.0 },
            new double[] { 1.0E-4, 456184, 8.043339705477194E-116, 1.0 },
            new double[] { 0.00229, 456184, 0.9833097797219497, 0.016690229966281184 },
            new double[] { 0.00798, 456184, 1.0, 1.163812173328924E-25 },
            new double[] { 1.0E-4, 466917, 3.708466165305097E-113, 1.0 },
            new double[] { 1.0E-4, 475382, 3.8485343024838555E-111, 1.0 },
            new double[] { 0.00674, 475382, 1.0, 3.477897447003149E-19 },
            new double[] { 1.0E-4, 475624, 4.384076293120965E-111, 1.0 },
            new double[] { 0.00896, 475624, 1.0, 1.3545138957341689E-33 },
            new double[] { 1.0E-4, 479250, 3.039821403004969E-110, 1.0 },
            new double[] { 1.0E-4, 492151, 2.369053933630797E-107, 1.0 },
            new double[] { 6.6E-4, 492151, 0.017242280452732104, 0.9827577195472679 },
#endregion
        };
    }
}